
Trucker Terminal System
- et adgangs kontrol system

Design
Udarbejdet af: Gruppe 7 (I2)
Medlemmer: Alex Hede 01065
Jeppe
Hasager 01048
Jesper
Johansen 02877
Søren
S Munk 02847
Vejleder: Michael E. Kristensen
Indholdsfortegnelse
2.1.3 Kontrol på programdesign
3.2.3 Grænseflader mellem processerne
3.2.4 Kontrol på programdesign
3.3.2 Processernes eksterne
grænseflader
3.4.1 Modulernes eksterne
grænseflader:
Projektet er opdelt i to dele, en databasedel
og en kommunikationsdel, begge med en tilhørende applikation. Diagrammet
nedenfor viser opdelingen af projektet, med tilhørende eksterne grænseflader.
De grå kasser viser henholdsvis kommunikationsdel og databasedel. De hvide
kasser illustrerer eksisterende terminal og ODBC driver. Terminalen leveres af
kunden og som ODBC driver anvendes Windows ODBC applikation.
Grænsefladerne er vist nedenfor som interfaces
1-4. Kommunikationsdelen har interface 1 til terminalen og interface 2 til ODBC
driver. Databasedelen har interface 3 til ODBC driver. Database applikationen
har interface 4 til ODBC driver.

Diagram 1 Overordnet grænsefladebeskrivelse.
Af: Alex Hede, Jeppe Hasager, Søren
S. Munk
Kommunikationsdelen skal varetage
kommunikationen mellem terminal og PC.
Der skal tjekkes om der er indlæst kort, og at
pinkode og kortnummer stemmer overens. Hvis de stemmer overens gives adgang og
grøn lampe tændes, ellers tændes rød lampe og der gives nyt forsøg. Hvis
pinkode indtastes forkert 3 gange spærres kort. Desuden udskrives vejledende
tekst under forløbet i det alfanumeriske display.
Kommunikationsdelen har, som det ses på
diagram 1, to eksterne grænseflader. Den ene grænseflade (interface 1), mellem
kommunikationsdelen og terminalen, er specificeret ved den HDLC lignende
protokol.
I HDLC protokollens informationsramme
(i-ramme), er der et id-felt, som kan antage følgende værdier A, B, C, D, E, F
og G. Vi anvender A, B, C og D, hvor A og B kommer fra terminalen og C og D
sendes af os til terminalen.
|
ID: |
|
Informationsindhold |
|
A |
Kortlæser |
Kortnummer |
|
B |
Tastatur |
PIN-kode og funktionstast |
|
C |
Numerisk display |
Tal der skal vises |
|
D |
Alfanumerisk display |
Informationstekst til brugeren |
Tabel 1 Id’ets
betydning
Den anden grænseflade (interface 2) er mellem ODBC driveren og kommunikationsdelen. Kommunikationen herimellem er specificeret ved SQL (structured query language), men bliver håndteret af databasedelen, da interface 2 og interface 4 er ens.
Kommunikationsapplikationens processer er angivet herunder:
Som kontrol på programdesignet opstilles følgende tabel. I tabellen er de enkelte krav i kravspecifikationens afsnit om specifikke krav, som henvender sig til kommunikationsapplikationen, opstillet mod de processer, som opfylder netop de krav.
|
Krav nr: |
3.2.1.1 |
3.2.1.2 |
|
Kravtekst |
Alt udover de 4 første cifre ignoreres ved indtastning. |
Når kortet læses korrekt, skal processen fuldføres eller afbrydes, før en ny proces kan starte. |
|
Opfyldes af proces: |
Hent pinkode |
Main |
|
Krav nr: |
3.2.1.3 |
3.2.1.4 |
|
Kravtekst |
Systemet går i udgangstilstand, hvis der går 15 sekunder fra kortindlæsning til afslutning af pinkode. |
Systemet går i spærret tilstand i 5 sekunder hvis kortet er spærret, hvorefter det går i udgangstilstand. |
|
Opfyldes af proces: |
Main |
Spærret tilstand |
|
|
|
|
|
|
3.2.1.5 |
3.2.1.6 |
|
Kravtekst |
Systemet går i udgangstilstand hvis kortnummer er ukendt. |
Punktet er fjernet. |
|
Opfyldes af proces: |
Tjek kortnr. |
|
|
|
|
|
|
Krav nr: |
3.2.1.7 |
3.2.1.8 |
|
Kravtekst |
Ved 3 forkerte indtastninger af pinkode spærres kortet. |
Efter korrekt indtastning af pinkode, har man igen 3 forsøg. |
|
Opfyldes af proces: |
Nægt adgang |
Giv adgang |
|
|
|
|
|
Krav nr: |
3.2.3.1 |
3.2.3.2 |
|
Kravtekst |
Før indlæsning af kortet, vises teksten: ”Klar. Indlæs kort”. |
Går der mere end 15 sekunder fra kortindlæsning til afslutning af pinkode går applikationen i udgangstilstand, med tilhørende displaytekst: ” Klar. Indlæs kort”. |
|
Opfyldes af proces: |
Hent kortnr. Skriv til alfa. display |
Main Skriv til alfa. display |
|
Krav nr: |
3.2.3.3 |
3.2.3.4 |
|
Kravtekst |
Efter indlæsning af kort vises teksten: ”Indtast pinkode”. |
Hvis kortet er spærret vises teksten: ”Kortet er spærret” i 5 sekunder hvorefter teksten ”Klar. Indlæs kort” vises. |
|
Opfyldes af proces: |
Hent pinkode Skriv til alfa. display |
Tjek kortnr. Skriv til alfa. display |
|
Krav nr: |
3.2.3.5 |
3.2.3.6 |
|
Kravtekst |
Hvis kortnummeret er ukendt vises teksten: ”Kortet er ukendt”. |
Efter indtastning af rigtig pinkode vises teksten: ”Godkendt”. |
|
Opfyldes af proces: |
Tjek kortnr. Skriv til alfa. display |
Giv adgang Skriv til alfa. display |
|
Krav nr: |
3.2.3.7 |
3.2.3.8 |
|
Kravtekst |
Efter indtastning af forkert pinkode vises teksten: ”Pinkoden er forkert. Prøv igen”. |
Efter den 3. mislykkede indtastning vises teksten:” Forkert pinkode, kortet er spærret” i 5 sekunder hvorefter teksten ”Klar. Indlæs kort” vises. |
|
Opfyldes af proces: |
Nægt adgang |
Nægt adgang Skriv til alfa. display |
|
Krav nr: |
3.2.4.1 |
3.2.4.2 |
|
Kravtekst |
Punktet er fjernet. |
Funktionstasten A sletter det sidst indtastede ciffer. |
|
Opfyldes af proces: |
|
Hent pinkode |
|
Krav nr: |
3.2.4.3 |
3.2.4.4 |
|
Kravtekst |
Funktionstasten C sletter den indtastede pinkode. |
Funktionstasten E accepter den indtastede pinkode. |
|
Opfyldes af proces: |
Hent pinkode |
Hent pinkode |
|
Krav nr: |
3.2.4.5 |
3.2.5.1 |
|
Kravtekst |
Alle uspecificerede funktionstaster fungerer som ’C’. |
Punktet er fjernet. |
|
Opfyldes af proces: |
Hent pinkode |
|
|
Krav nr: |
3.2.5.2 |
3.2.6.1 |
|
Kravtekst |
Der vil være nedtælling fra 15 sekunder til 0, mens man har mulighed for at indtaste pinkode. |
Rød lyser ved spærret kort. |
|
Opfyldes af proces: |
Main Skriv til num.display |
Tænd lampe Spærret tilstand |
|
Krav nr: |
3.2.6.2 |
3.2.6.3 |
|
Kravtekst |
Rød lyser ved ukendt kort. |
Rød lyser hvis pinkoden er forkert indtastet 3 gange. |
|
Opfyldes af proces: |
Tænd lampe |
Tænd lampe Nægt adgang |
|
Krav nr: |
3.2.6.4 |
|
Kravtekst |
Grøn lyser når pinkoden er accepteret. |
|
Opfyldes af proces: |
Tænd lampe Giv adgang |
Af: Alex Hede, Jeppe Hasager, Søren
S. Munk
Kommunikationsapplikationen er ovenfor blevet opdelt i processer.
Processerne og deres grænseflader bliver
beskrevet nærmere nedenfor.

Diagram 2 Grænseflader
mellem processer
Diagrammet viser hvilke processer der
kommunikerer med hinanden. Enkeltpile illustrerer at funktionen ikke returnerer
et svar. Dobbeltpile illustrerer at funktionen returnerer et svar.
Main funktionen kommunikerer med de grå hovedprocesser. Hovedprocesserne kommunikerer med de underliggende processer som hver løser deres opgave. Det er kun de vigtigste underliggende processer, der er illustreret herover, for at gøre diagrammet mere overskueligt. Samtlige processer er illustreret i diagram 3 herunder.

Diagram 3 Kommunikation mellem de enkelte processer (beskrivelse efter tabel) se bilag 4
|
NR |
INPUT |
OUTPUT |
|
1 |
Tekst, længde |
|
|
2 |
Fortegn, Tal, længde |
|
|
3 |
Kortnummer |
Status |
|
4 |
Antal
sekunder |
|
|
5 |
Kortnummer |
Status |
|
6 |
Kortnummer, Read/write |
Blokeret status |
|
7 |
Lampenummer |
|
|
8 |
Pin-kode |
Status |
|
9 |
Kortnummer, Pin-kode |
Gyldig |
|
10 |
|
Status |
|
11 |
Kortnummer Antal |
|
|
12 |
|
Status |
|
13 |
Kortnummer |
Antal |
Tabel 2 parametertabel
I diagram 3
herover illustreres sammenhængen mellem modulerne. Niveauet under main kaldes
hovedfunktioner, der alle kaldes af main fra venstre mod højre. Niveauerne
under hovedfunktionerne kaldes underfunktioner. Under hver hovedfunktion ses
hvilke underfunktioner den kan bruge. Funktioner der har et nummer tager enten
parametre og/eller returnerer en værdi. Tallene i Diagram 3 refererer til
parametertabellen, der er vist i tabel 1. Tabellen beskriver hvilke input og
output de nummererede funktioner har.
Samtlige funktioner der kommunikerer med
terminalen, kalder setTerminalStatus() fra databasedelen, for at opdatere dens
status.
Herunder ses en overordnet opdeling af
kommunikationsdelen i mindre processer.

Diagram 4 Kommunikationsdelen
opdelt i mindre processer
Nedenfor beskrives hvilket formål hver proces,
der ses i Diagram 4, har.
|
|
Før en proces kan gennemføres, skal der være
oprettet et objekt, der giver adgang til databasen. Dette objekt giver
ligeledes mulighed for at validere pin-kode og kortnummer, og spærring af
kort. Dette objekt laves af databasedelen. |
|
|
void udgangstilstand() kaldes Funktionen nulstiller det alfanumeriske og
det numeriske display. Rød og grøn lampe slukkes. |
|
|
bool getKortnr(&int) kaldes. Funktionen viser teksten ”Klar. Indlæs kort”
ved anvendelse af funktionen (void setAlfadisp (char [] linie1)). Terminalen polles for at finde ud af om der
er indlæst kort. Hvis ID er A, som betyder at der er registreret et
kortnummer, gemmes kortnummeret på den adresse som funktionen har modtaget
som parameter. Processen kan derefter fortsætte. Ellers polles der igen
indtil der indlæses et kort. Hvis der er indlæst kort returneres true.
Ellers returneres false. |
|
|
(bool tjekKortnr() ) Funktionen kontrollerer først
kortnummerformatet som skal være på 4 cifre. Hvis formatet ikke er OK vises
teksten ”Kortet er ukendt”, og der returneres false. Hvis formatet er OK,
kontrollerer funktionen om kortet er spærret ved at se i databasen. Hvis
kortet er spærret, vises teksten ”Kortet er spærret” og funktionen void
kortSpaerret() kaldes. Denne funktion tænder den røde lampe og går efter et
stykke tid tilbage til udgangstilstand. Der returneres false. Hvis
kortnummeret er OK returneres true. |
|
|
(bool getPinkode(&int) ) Funktionen kaldes efter at funktionen tjek
kortnummer har returneret true. Funktionen aflæser pinkoden ud fra informationsfeltet
i HDLC protokollens i-ramme, når id-feltet antager værdien B. Er pinkoden
indtastet efterfulgt af funktionstasten E returneres true. Hvis der er trykket på funktionstasten B, C,
D eller F kan der indtastes en pinkode på ny, hvis der ikke er trykket på en
funktionstast inden 15 sekunder returneres false. Hvis der trykkes på
funktionstasten A returneres false. Når der returneres false går applikationen i
udgangstilstand. Tiden udmåles fra funktionen kaldes. |
|
|
(bool validerPinkode (int kortNummer, int pinkode)) Funktionen implementeres af databasedelen. Funktionen returnerer true eller false, og
har kortnummer og pin-kode som parametre. Funktionen returnerer true når den
indtastede pin-kode stemmer overens med den i databasen gemte pin-kode. |
|
|
(bool givAdgang() ) Funktionen kaldes når valider pinkode og
kortnummer returnerer true. Funktionen udskriver ”Godkendt” til det
alfanumeriske display, og returnerer det samme som setAntalForsøg i
databasedelen. I begge tilfælde gives adgang. Funktionen kalder tænd lampe. |
|
|
(void taendLampe(int) ) Funktionen kaldes med 0 1 for tænd grøn
lampe. Der returneres til udgangstilstand. |
Nedenstående figur viser en oversigt over
steder i applikationen, hvor der kan opstå kritiske fejl. Ved kritiske fejl
menes ydre omstændigheder, som applikationen ikke selv er i stand til at løse.
Dette betyder ikke at applikationen afsluttes, men den går i udgangstilstand.
Applikationen forbliver i denne tilstand indtil fejlen er rettet. Fejltyperne
er beskrevet nedenfor diagrammet.

Diagram
5 Worst case diagram, med fejlnumre
Fejltyper I Diagram 5:
Fejl 1: ! DB
connect: ODBC servicen kan ikke oprette
forbindelse
til databasen.
Som eksempel kan
nævnes at databasen ikke er oprettet.
Fejl 2: ! Terminal connect: Applikationen kan ikke oprette
forbindelse til
terminalen.
Som eksempel kan
nævnes strømsvigt eller at kablet ikke er korrekt forbundet.
Fejl 3: Applikationen lukkes Applikationen lukkes/afsluttes.
Som
eksempel kan nævnes at en bruger trykker ctrl+C, dette kan ske i alle
funktioner.
Nedenstående diagram viser de processer der
gennemføres ved et korrekt forløb, hvor kort og pinkode accepteres første gang
og der gives adgang.

Diagram 6 beskriver
det forventede forløb
Forbindelse til databasen bliver oprettet.
Applikationen går i udgangstilstand.
Et kort indlæses.
Kortnummerformatet er OK, og kortnummeret er
ikke spærret.
En pinkode indtastes.
Pinkode og kortnummer stemmer overens.
Der gives adgang og grøn lampe tændes.
Applikationen går tilbage i udgangstilstand.
Af: Alex Hede, Jeppe Hasager, Søren
S. Munk
Kommunikationsdelen er inddelt i to moduler,
kommunikations- og HDLC-modul.
HDLC modulet indeholder HDLC klassen, der implementerer
HDLC protokollen, og den bruger ComClass klassen til at tilgå den serielle port.
ComClass giver mulighed for at sende og modtage data fra en seriel port via 2
funktioner send() og receive() samt se hvor meget data der er i modtager
bufferen, inWaitingBuffer().
Kommunikationsmodulet, i diagram 5 kaldet Komm,
anvender HDLC-modulet til at overføre data mellem terminal og pc og DB_Com til
at kommunikere med databasen.

Diagram 7 Modulernes eksterne grænseflader
Diagrammet viser modulerne som indgår i
kommunikationsdelen og hvordan de inbyrdes kommunikerer. DB_Com er en klasse
der bliver stillet til rådighed fra databasedelen. Kommunikations og HDLC
modulet beskrives herunder.
Parenteser angiver C++-prototyper. Derefter
følger en beskrivelse af parametre og returværdier, og en yderligere
beskrivelse af funktionernes virkemåde.

Diagram 8 UML
diagram over Komm klassen
Hent
pinkode (bool getPinkode(&int))
”Indtast pinkode”
Hent de fire første cifre af pinkoden
Returner true hvis der kan hentes en pinkode
og der er trykket på funktionstasten E, hvis der er trykket på funktionstasten
B, C, D og F kan der indtastes en pinkode på ny.
Hvis der ikke er trykket på en funktionstast
efter 15 sekunder returneres false.
Hvis der trykkes på funktionstasten A
returneres false.
Giv
adgang (bool givAdgang())
”Godkendt”
Tænd grøn lampe
Nulstil antal forkerte indtastninger af
pinkode
Kort pause, vent 5 sekunder
Spærret
tilstand (void spaerrettilstand())
Rød lampe tændes
Vent 5 sekunder
Hent
kortnr. (bool getKortnr(&int))
”Klar. Indlæs kort”
Hent kortnummer
Hvis kort indlæst returner true
Ellers returneres false
Tjek
kortnr. (bool tjekKortnr(int kortnummer))
Hvis kortnummer formatet ikke OK ”Kortet er
ukendt”, returner false
Hvis kortet er spærret, ”Kortet er spærret” gå
i spærret tilstand, returner false
Ellers returneres true
Nægt
adgang (bool naegtAdgang())
”Pinkoden er forkert. Prøv igen”
Antal forsøg tælles 1 op
Hvis antal forsøg >= 3 spærres kort
”Forkert pinkode, kortet er spærret”
Gå i spærret tilstand.
Udgangstilstand
(void udgangstilstand())
Nulstil terminal //nulstil display, tøm buffer
Sluk rød lampe
Sluk grøn lampe
Tænd lampe
(void taendLampe(int))
Tænd for en given lampe
Sluk
Lampe (void slukLampe(int))
Sluk for en given lampe
Skriv
til numerisk display (void setNumdisp (char sign,
char *tal))
Udskriver til det numeriske display
Skriv
til alfanumerisk display (void setAlfadisp (char []
linie2, int length))
Udskriver til det alfanumeriske display i
linie 2
Opdater
tid (void opdaterTid())
Udskriver dato og klokkeslæt til alfanumerisk
display i linie 1.
Vent (void vent(int tid))
Venter et givet antal millisekunder.
Kommunikationen
mellem PC og terminal sker ved den HDLC lignende protokol. De funktioner der
anvendes i HDLC-klassen er beskrevet herunder med parametre
og returværdier, og en yderligere beskrivelse af funktionernes virkemåde.

Diagram 9 UML
diagram for HDLC klassen
Send en
pakke (void send())
Kalder setNs og setNr og lægger CHK ind i
pakken. I pakken indsættes DLE og STX tegn på plads 0 og 1 og derefter laves
bytestuffing. Pakken sendes derefter via klassen serialCom::send.
Modtag
en pakke (bool receive())
Funktionen ser efter start bytene DLE og STX.
Der fjernes eventuelle bytestuffede DLE’er. Returnerer true når en pakke er
korrekt modtaget og returnerer false når der er fejl i CHK eller time out.
Indsæt information (bool setInfo(char *data, int infoLength))
Hvis I-ramme, så indsættes informationen på
den 6. plads (byte) i pakken, og
returnerer true.
Ellers returneres false
Hent
information (char* getInfo(int *length))
Henter indholdet af informationsfeltet fra
pakken.
Indsæt
længde (bool setLEN(int length))
Indlæser længden af I-rammen og returnerer
true, hvis S-rammereturneres false.
Hent
længde (int getInfoLength())
Henter længden af informationsfeltet fra LEN
på plads nummer 4. Returnerer LEN –7. Header og checksum fylder tilsammen 7
byte.
Indsæt
id (void setId(char id))
Sætter I-rammens 5. plads lig med id.
Hent id
(char getId())
Returnerer pakkens id.
Indsæt
type (void setType(int rammetype))
Sætter rammetypen til I-ramme eller S-ramme.
Hvis S-ramme oprettes nyt pakke array.
Hent
type (char getType())
Henter rammetype. Tjekkes ved at bruge AND
operator på KON feltets mindst betydende bit for at se hvilken type ramme der
er tale om og returnerer denne.
Indsæt
adresse (void setAdr(char adresse))
Indsætter adressen fra rammens plads nr. 2
Hent
adresse (char getAdr())
Returnerer adressen fra rammens plads nr. 2
Boot terminal (bool setBoot(bool value))
Indsætter boot lig 1 1 hvis value er true.
Returnerer true hvis det er en S-ramme og der er indhold i pakken. Ellers
returneres false.
Klar
til modtagelse (bool getReady())
Returnerer true når S-rammens KON byte
indeholder 0 på bit 1 og 2, så er der gjort klar til modtagelse af en ny ramme
ellers returneres false.
Indsæt nummer på I-ramme (void setNS(int value))
Indsætter nummeret på den afsendte I-ramme.
Hent nummer på I-ramme (int getNS())
Returnerer nummeret på den afsendte I-ramme
Indsæt nummer på næste I-ramme (void setNR(int value))
Indsætter nummeret på næste I-ramme.
Hent nummer på næste I-ramme (int getNR())
Returnerer nummer på næste I-ramme.
Indsæt flag til styring af hvornår der må
sendes (void setPF(int value))
Indsætter flag til styring af afsendelse af
rammer. Når pc’ens PF sættes til 1 må terminalen svare. Når terminalens PF
sættes til 1 har den ikke mere at sende.
Hent flag til styring af hvornår der må
sendes (bool getPF())
Henter flag til styring af hvornår der må
sendes rammer mellem pc’en og terminalen. Returnerer true når flag er sat og
der må sendes pakke.
Hent checksum (char
getCHK())
Henter checksum der beregnes som en XOR-sum af
alle bytes, med undtagelse af indsatte DLE’er fra bytestuffing.
Time out (bool receiveOneCharTimeout(char *value))
Når bufferen ikke er tom hentes karakteren og kopieres
over i parameteren value. Funktionen returnerer true når dette er sket og
returnere false der er time out.
Af: Alex Hede, Jeppe Hasager, Søren
S. Munk
Databaseapplikationen bruger en database, som indeholder de data der knytter sig til de enkelte brugere. Databasen benyttes tillige af kommunikationsdelen, som slår op i databasen for at hente værdier og skriver til databasen.
Databasen knyttes til applikationen med en ODBC, som således bliver databasens grænseflade til selve applikationen.

Diagram 10 Databasens eksterne grænseflader
De data, som databasen indeholder, er:
Brugernavn: navn på bruger.
Kundenummer: Et nummer, som er unikt for hver bruger tildeles som et løbenummer.
Kortnummer: Et nummer, som er unikt for hver kort.
Pinkode: En kode (nummer), som tildeles hvert kort.
Kort_Spærret: En boolean, som angiver om et givet kort er spærret – true eller åbent – false.
Antal_Forsøg: Et nummer, som angiver hvor mange forkerte indtastnings forsøg af pinkode der er foretaget på et givet kort.
Terminalnummer: Et nummer, som er unikt for hver terminal, som er knyttet til systemet.
Status: Et nummer, som angiver en given terminals status.
Da hver bruger godt kan have flere kort knyttet til sig placeres Kundenummer og brugernavn i en tabel, Kundenummer, kortnummer, pinkode, kort_spærret og antal_forsøg i en tabel og endelig terminalnummer og status i en tabel.
Der bliver hermed følgende inddeling af tabeller:
Tabel_Kortdata:
|
Kundenummer |
Kortnummer |
Pinkode |
Kort_spærret |
Antal_forsøg |
Tabel_Brugerdata:
|
Kundenummer |
Brugernavn |
Tabel_Terminaldata:
|
Terminalnummer |
Status |
Tabellerne Tabel_Kortdata og Tabel_Brugerdata knyttes sammen med datanavnet Kundenummer.
Databasen får dermed følgende struktur:

Diagram 11 Databasens struktur
Al håndtering af databasen sker fra databaseapplikationen, og databasen indeholder dermed kun de ovennævnte tabeller.
Af: Jesper Johansen
Programmets eksterne grænseflader består af:
Programmets eksterne grænseflader er illustreret på Diagram 12.

Diagram 12 Programmets eksterne grænseflader
Databaseapplikationens processer er angiver herunder:
I det følgende er processerne beskrevet i detalje:
Tilgå Database.
Processen opretter og afbryder forbindelse til den anvendte database.
Opret bruger
Processen opretter en ny bruger i databasen udfra modtagne parametre.
Processen opretter en bruger med navn hvis brugeren ikke allerede er oprettet. Derefter tildeler den brugeren:
Processen tjekker, at kortnummer ikke overstiger 4 cifre og at pinkoden ikke overstiger 4 cifre.
Rediger Bruger
Slet Bruger
Søg
Servicer Kommunikation Applikation (Service
Kom. App.)
Processen servicerer Kommunikations applikationen, således at den kan hente data fra og skrive til databasen. Processen:
Terminalstatus.
Processen:
Grænsefladerne er illustreret på følgende figur:
Processerne kommunikerer således, at hver proces skriver til eller læser fra databasen via Tilgå database, som har oprettet forbindelse til ODBC’en. Hver af processerne Opret bruger, Rediger bruger, Slet bruger, Spær kort anvender processen Søg, og der er derfor kommunikation mellem disse processer. Der er ingen kommunikation mellem følgende processer: Opret bruger, Rediger bruger, Slet bruger og Spær Kort, da de alle ligger på samme niveau.
Dette illustreres på følgende figur:

Diagram 13 Kommunikation mellem de enkelte processer
Som kontrol på programdesignet opstilles følgende tabel. I tabellen er de enkelte krav i krav-specifikationens afsnit om specifikke krav, som henvender sig til databaseapplikationen, opstillet mod de processer, som opfylder netop de krav.
|
Krav nr: |
3.2.2.1 |
3.2.2.2 |
|
Kravtekst |
Applikationen bruger en database til opbevaring af brugerprofiler. |
Applikationen skal kunne indeholde minimum 100 brugere. |
|
Opfyldes af proces: |
Samtlige
processer anvender databasen. Der er ikke en egentlig proces, som opretter
databasen. Dette gøres manuelt |
Der anvendes
en database, som kan indeholder mere end 100 brugere. |
|
|
|
|
|
Krav nr: |
3.2.2.3 |
3.2.2.4 |
|
Kravtekst |
I applikationen skal man kunne oprette en ny brugerprofil. |
Applikationen skal kunne søge i listen over brugere, udfra navn eller kundenummer. |
|
Opfyldes af proces: |
Tilgå Database Opret Bruger Søg |
Tilgå Database Opret Bruger Rediger Bruger Slet Bruger Søg Service Kom. App. |
|
|
|
|
|
Krav nr: |
3.2.2.5 |
3.2.2.6 |
|
Kravtekst |
Applikationen skal kunne redigere en brugers navn, pinkode og kortnummer. |
Applikationen skal kunne fjerne en bruger. |
|
Opfyldes af proces: |
Tilgå Database Rediger Bruger Søg |
Tilgå Database Slet Bruger Søg |
|
|
|
|
|
Krav nr: |
3.2.2.7 |
3.2.2.8 |
|
Kravtekst |
Applikationen skal kunne spærre et kort. |
Er et kort spærret i applikationen, skal det kunne åbnes igen. |
|
Opfyldes af proces: |
Tilgå Database Søg Service Kom. App. |
Tilgå Database Rediger Bruger Søg |
|
|
|
|
|
Krav nr: |
3.2.2.9 |
3.2.2.10 |
|
Kravtekst |
Navnet må højst være på 256 karakterer. |
Kundenummer må højst være 8 cifre. |
|
Opfyldes af proces: |
Databasen oprettes manuelt, og feltet Brugernavn sættes til 256 tegn. Tilgå Database OpretBruger Søg |
Databasen oprettes manuelt, og feltet Brugernavn sættes til 8 cifre. Tilgå Database Opret Bruger Søg |
|
|
|
|
|
Krav nr: |
3.2.2.11 |
3.2.2.12 |
|
Kravtekst |
Kortnummeret skal være på 4 cifre. |
Applikationen skal kunne kontrollere i databasen om kortnummer og pinkode passer sammen. |
|
Opfyldes af proces: |
Tilgå Database OpretBruger RedigerBruger Søg |
Tilgå Database Servicer Kommunikations Applikation |
Som tjek på at alle krav er opfyldt af mindst 1 proces kan følgende skema laves (fra ”Struktureret program udvikling”):
|
Processer Tilgå database Søg Opret Bruger Rediger Bruger Slet Bruger Terminalstatus Servicer komm. App. |
Krav 3.2.2.X
|
Diagram 14 Oversigt over hvilke krav, der er opfyldt af hvilke processer
Af: Jesper Johansen
Den anvendte designmetode af de enkelte processer er objektorienteret design. Hvor de enkelte processer søges implementeret via medlemsfunktioner.
Processerne kommunikerer eksternt med input fra brugeren og med ODBC’en, som varetager kommunikationen med databasen. Processen Søg kommunikerer ikke med omverdenen, men kun med andre processer. Processernes eksterne grænseflader kan illustreres på følgende figur:

Diagram 15 Processernes eksterne grænseflader
Modulopdelingen sker efter objektorientering. Det vil sige, at de enkelte processer, spredes ud på forskellige klasser, som hver indeholder et antal funktioner til udførelse af de opgaver klassen har.
I det følgende inddeles processerne i klasser.
Følgende klasser oprettes:
DB_Opret_Forb: Opretter og afbryder forbindelse til ODBC og dermed databasen.
Faelles_Klasse: Arver public fra DB_Opret_Forb, og indeholder funktioner, som skal bruges af Database administrations applikationen og af Kommunikationeapplikationen.
DB_Database. Arver public fra Faelles_Klasse og indeholder de funktioner, som bruges af Database administrations applikationen.
DB_Com: Arver public fra Faelles_Klasse og indeholder de funktioner, som skal bruges af Kommunikationeapplikationen.
DB_Screen Varetager alle Processer, som Database administrations applikationen består af.
Klasseinddelingen foretages med arv, således at diverse funktioner kan genbruges i flere sammenhænge.
I det følgende er opridset hvilke klasser, som varetager hvilke processer. Der er gjort efter hierarkisk opdeling, således at de overordnede klasser er nævnt først. Det skal bemærkes, at en proces godt kan varetages af flere klasser.
Tilgå Database:
Denne proces løses af klassen: DB_Opret_Forb.
Opret Bruger:
|
Denne proces løses af klasserne: |
|
Rediger Bruger:
|
Denne proces løses af klasserne: |
|
Slet bruger
|
Denne proces løses af klasserne: |
|
Søg
|
Denne proces løses af klasserne: |
|
Tilgå database:
|
Denne proces løses af klassen: |
|
Servicer Kommunikation Applikation:
|
Denne proces løses af klassen: |
|
Terminalstatus.
|
Denne proces løses af klasserne: |
|
De nævnte klasser indeholdende funktioner og medlemsdata fremgår nedenfor.
Diagram 16
Klasseoversigt indeholdende funktioner og medlemsdada
Af: Jesper Johansen
I det følgende beskrives grænsefladerne mellem de enkelte funktioner / moduler.
På figuren fremgår det af pilens retning hvilken funktion, der har kaldt hvilken funktion.

Diagram 17 Oversigt over de enkelte funktioners grænseflader
I der følgende designes de enkelte funktioner. I teksten er alle inputs skrevet med kursiv.
Algoritmerne fastlægges med flowcharts, som følger efter beskrivelsen.
Funktionerne i klassen. DB_Opret_Forb.
|
Funktionsnavn |
Opret_Forbindelse |
|
|
Input |
intet |
|
|
Output |
true/false |
|
|
Funktion |
Opretter forbindelse til ODBC, så andre
funktioner kan tilgå ODBC. |
|
|
Erklæring |
bool DB_Opret_forb::Opret_Forbindelse (); |
|
Funktionsnavn |
Luk_Forbindelse |
|
Input |
intet |
|
Output |
intet |
|
Funktion |
Lukker forbindelsen til ODBC. |
|
Erklæring |
void DB_Opret_forb::Luk_Forbindelse () |
Funktionerne i klassen. Faelles_Klasse.
|
Funktionsnavn |
blokerKort |
|
|
Input |
Int kortNummer Bool skrivLaes |
|
|
Output |
true / false |
|
|
Funktion |
Funktionen gør to ting:
NB: Hvis der modtages et kortNummer,
som ikke findes i databasen, returneres false uanset hvilken værdi skrivLaes
har. |
|
|
Erklæring |
bool Faelles_klasse::blokerKort (int kortNummer, bool skrivLaes) |
|
Funktionsnavn |
setAntalForsoeg |
|
|
Input |
int kortNummer int antal |
|
|
Output |
True/false |
|
|
Funktion |
Funktionen opdaterer antal forkerte indtastnings forsøg af pinkode på det modtagne kortNummer til det modtagne antal i Tabel_kortdata og returnerer true hvis opdateringen er succesfuld. Hvis det modtagne kortNummer ikke findes i Tabel_kortdata opdateres intet, og der returneres false. |
|
|
Erklæring |
bool Faelles_klasse::setAntalForsoeg (int kortNummer, int antal) |
|
Funktionsnavn |
getAntalForsoeg |
|
|
Input |
int kortNummer |
|
|
Output |
Integer (heltal) |
|
|
Funktion |
Funktionen skal returnere det antal forkerte forsøg på pinkodeindtastning, der er foretaget på et kort med kortnummeret kortNummer, fra Tabel_kortdata. Hvis det modtagne kortNummer ikke findes i databasen, returneres et ’0’. |
|
|
Erklæring |
int Faelles_klasse::getAntalForsoeg (int kortNummer) |
|
Funktionsnavn |
getPinkode |
|
|
Input |
int kortNummer |
|
|
Output |
Integer (heltal) |
|
|
Funktion |
Funktionen skal returnere den pinkode, der er knyttet til kortnummeret i Tabel_kortdata med værdien kortNummer. Hvis det modtagne kortNummer ikke findes i databasen, returneres et nul ’0’. |
|
|
Erklæring |
int Faelles_klasse::getPinkode (int kortNummer) |
|
Funktionsnavn |
findesKortNummer |
|
|
Input |
int kortNummer |
|
|
Output |
True/false |
|
|
Funktion |
Funktionen skal returnere true hvis det modtagne kortNummer findes i Tabel_kortdata, false hvis ikke. |
|
|
Erklæring |
bool Faelles_klasse::findesKortNummer(int kortNummer) |
Funktionerne i klassen. DB_Com.
|
Funktionsnavn |
DB_Com |
|
Input |
intet |
|
Output |
intet |
|
Funktion |
Funktionen (Constructor), skal kalde funktionen: |
|
Erklæring |
DB_Com::DB_Com() |
|
Funktionsnavn |
~DB_Com |
|
Input |
intet |
|
Output |
intet |
|
Funktion |
Funktionen (Destructor), skal kalde funktionen: |
|
Erklæring |
DB_Com::~DB_Com() |
|
Funktionsnavn |
validerPinkode |
|
|
Input |
int kortNummer int pinkode |
|
|
Output |
True/false |
|
|
Funktion |
Funktionen skal undersøge om den modtagne pinkode stemmer overens med den pinkode, der findes i Tabel_kortdata knyttet til kortnummeret kortNummer. Der returneres true hvis de to pinkoder stemmer overens, false hvis ikke. Hvis det modtagne kortNummer ikke findes i Tabel_kortdata, returneres false. Til at finde pinkoden knyttet til
kortnummeret kortNummer, kaldes funktionen: |
|
|
Erklæring |
bool DB_Com::validerPinkode (int kortNummer, int pinkode) |
|
Funktionsnavn |
setTerminalStatus |
|
|
Input |
int fejlkode |
|
|
Output |
True/false |
|
|
Funktion |
Funktionen skal opdatere databasen til en given fejlkode, hvor terminalnummer er 1. Der returneres true hvis opdateringen er succesfuld, false hvis ikke. |
|
|
Erklæring |
bool DB_Com::setTerminalStatus (int fejlkode) |
Funktionerne i klassen. DB_Database.
|
Funktionsnavn |
DB_Database |
|
Input |
intet |
|
Output |
intet |
|
Funktion |
Funktionen (Constructor), skal kalde funktionen: |
|
Erklæring |
DB_Database::DB_Database() |
|
Funktionsnavn |
~DB_Database |
|
Input |
intet |
|
Output |
intet |
|
Funktion |
Funktionen (Destructor), skal kalde funktionen: |
|
Erklæring |
DB_Database::~DB_Database() |
|
Funktionsnavn |
setNyKortNummer |
|
|
Input |
int kortNummer |
|
|
Output |
True/false |
|
|
Funktion |
Funktionen skal tilføje et nyt kortnummer: værdien kortNummer til tabel_kortdata. Hvis tilføjelsen er succesfuld returneres true, false hvis ikke. |
|
|
Erklæring |
bool DB_Database::setNyKortNummer(int kortNummer) |
|
Funktionsnavn |
setNyNavn |
|
|
Input |
const char *brugerNavn |
|
|
Output |
True/false |
|
|
Funktion |
Funktionen skal tilføje et nyt navn:
strengen i brugerNavn til tabel_Brugerdata. |
|
|
Erklæring |
bool DB_Database::setNyNavn (const char *brugerNavn) |
|
Funktionsnavn |
setNyKundeNummer |
|
|
Input |
int kundeNummer int kortNummer |
|
|
Output |
True/false |
|
|
Funktion |
Funktionen skal opdatere tabel_Brugerdata til et nyt kundenummer med værdien kundeNummer hvor kortnummeret er kortNummer. Der returneres true hvis opdateringen er succesfuld, false hvis ikke. Hvis der modtages et kortNummer, som ikke findes i databasen, opdateres ikke og der returneres false. |
|
|
Erklæring |
bool DB_Database::setNyKundeNummer (int kundeNummer, int kortNummer) |
|
Funktionsnavn |
setNavn |
|
|
Input |
const char *brugerNavn int brugerNummer |
|
|
Output |
True/false |
|
|
Funktion |
Funktionen skal opdatere tabel_Brugerdata til et nyt brugernavn med værdien brugerNavn, hvor kundenummeret er brugerNummer. Der returneres true hvis opdateringen er succesfuld, false hvis ikke. Hvis der modtages et kortNummer, som ikke findes i databasen, opdateres ikke og der returneres false. |
|
|
Erklæring |
bool DB_Database::setNavn (const char *brugerNavn, int brugerNummer) |
|
Funktionsnavn |
setKortNummer |
|
|
Input |
int kortNummer int kortNrGammel |
|
|
Output |
True/false |
|
|
Funktion |
Funktionen skal opdatere tabel_kortdata til et nyt kortnummer med værdien kortNummer, hvor kortnummeret har værdien kortNrGammel. Der returneres true hvis opdateringen er succesfuld, false hvis ikke. Hvis der modtages et kortNummer, som ikke findes i databasen, opdateres ikke og der returneres false. |
|
|
Erklæring |
bool DB_Database::setKortNummer (int kortNummer, int kortNrGammel) |
|
Funktionsnavn |
setPinkode |
|
|
Input |
int pinkode int kortNummer |
|
|
Output |
True/false |
|
|
Funktion |
Funktionen skal opdatere tabel_kortdata til en nyt pinkode med værdien pinkode, hvor kortnummeret har værdien kortNummer. Der returneres true hvis opdateringen er succesfuld, false hvis ikke. Hvis der modtages et kortNummer, som ikke findes i databasen, opdateres ikke og der returneres false. |
|
|
Erklæring |
bool DB_Database::setPinkode (int pinkode, int kortNummer) |
|
Funktionsnavn |
setKortSpaerret |
|
|
Input |
int kortNummer |
|
|
Output |
True/false |
|
|
Funktion |
Funktionen skal opdatere tabel_kortdata sålededes, at kort_spærret værdien sættes til false hvor kortnummeret har værdien kortNummer. Der returneres true hvis opdateringen er succesfuld, false hvis ikke. Hvis der modtages et kortNummer, som ikke findes i databasen, opdateres ikke og der returneres false. |
|
|
Erklæring |
bool DB_Database::setKortSpaerret (int kortNummer) |
|
Funktionsnavn |
sletBruger |
|
|
Input |
int brugerNummer |
|
|
Output |
True/false |
|
|
Funktion |
Funktionen skal slette alle data associeret men kundenummeret brugerNummer i tabel_Brugerdata og tabel_Kortdata. Der returneres true hvis sletningen er succesfuld, false hvis ikke. Hvis der modtages et brugerNummer, som ikke findes i databasen, slettes ikke og der returneres false. |
|
|
Erklæring |
bool DB_Database::sletBruger (int brugerNummer) |
|
Funktionsnavn |
getNavn |
|
|
Input |
int brugerNummer |
|
|
Output |
Tekststreng |
|
|
Funktion |
Funktionen skal returnere den tekststreng, der står i tabel_Brugerdata hvor værdien af kundenummeret er brugerNummer. Hvis det modtagne brugerNummer ikke findes i databasen returneres nul ’0’. |
|
|
Erklæring |
const char * DB_Database::getNavn (int brugerNummer) |
+
|
Funktionsnavn |
getKundeNummer |
|
|
Input |
const char *brugerNavn |
|
|
Output |
Heltal |
|
|
Funktion |
Funktionen skal returnere det kundenummer, der står i tabel_Brugerdata hvor værdien af brugernavnet er brugerNavn. Hvis det modtagne brugerNavn ikke findes i databasen returneres nul ’0’. |
|
|
Erklæring |
int DB_Database::getKundeNummer (const char *brugerNavn) |
|
Funktionsnavn |
getTerminalStatus |
|
|
Input |
intet |
|
|
Output |
Heltal |
|
|
Funktion |
Funktionen skal returnere den terminalstatus, der står i tabel_terminaldata hvor værdien af Terminalnummer er 1. |
|
|
Erklæring |
int DB_Database::getTerminalStatus () |
|
Funktionsnavn |
getBrugerAll |
|
|
Input |
char *searchName |
|
|
Output |
True/false |
|
|
Funktion |
Funktionen skal udvælge alle brugernavne og kundenumre fra tabel_Brugerdata hvor starten af brugernavnet matcher det modtagne searchName. Resultatet skal udskrives på skærmen i listeform med headere. Der returneres true. |
|
|
Erklæring |
bool
DB_Database::getBrugerAll (char *searchName) |
|
Funktionsnavn |
getKortData |
|
|
Input |
int brugerNummer |
|
|
Output |
True/false |
|
|
Funktion |
Funktionen skal udvælge følgende kortdata:
fra tabel_kortdata hvor værdien af kundenummer er det modtagne brugerNummer. Resultatet skal udskrives på skærmen i listeform med headere. Der returneres true. |
|
|
Erklæring |
bool DB_Database::getKortData (int brugerNummer) |
|
Funktionsnavn |
findesBruger |
|
|
Input |
const char *brugerNavn |
|
|
Output |
True/false |
|
|
Funktion |
Funktionen returnerer true hvis det modtagne brugerNavn findes i tabel_Kortdata, false hvis ikke. |
|
|
Erklæring |
bool DB_Database::findesBruger ( const char *brugerNavn) |
|
Funktionsnavn |
opretNyBruger |
Se neden for. |
|
Input |
const char *brugerNavn int kortNummer int pinkode |
|
|
Output |
True/false |
|
|
Funktion |
Funktionen opretter en ny bruger, ved at fylde data i alle pladser i tabel_brugerdata og tabel_kortdata. Hvis der brugerNavn allerede findes i tabel_brugerdata oprettes det ikke på ny. Funktionen undersøger først om det modtagne brugerNavn findes i tabel_brugerdata ved at kalde: findesBruger hvor brugerNavn medgives. Findes ikke: Funktionen kalder setNyNavn hvor brugerNavn medgives. Herefter kaldes følgende funktioner: getKundeNummer hvor brugerNavn medgives. SetNyKortNummer hvor kortNummer medgives. SetNyKundeNummer hvor et kundenummer og kortNummer medgives. SetPinkode hvor kortNummer medgives. SetKortSpaerret hvor kortNummer medgives. setAntalForsoeg hvor kortNummer medgives. |
|
|
Erklæring |
bool DB_Database::opretNyBruger (const char *brugerNavn, int kortNummer, int pinkode) |

Funktionerne i klassen. DB_Screen.
|
Funktionsnavn |
modtagPinkode |
|
|
Input |
intet |
|
|
Output |
True/false |
|
|
Funktion |
Funktionen udskriver ” Indtast pinkode:” på skærmen og modtager pinkode, som indtastning. Hvis der er tastet ”-1” returneres false. Hvis der er tastet forskellig fra 4 cifre udskrives: ” Pinkoden skal være på 4 cifre. Indtast et nyt pinkode”. Der fortsættes med at forlange en pinkode til der er tastet 4 cifre. Herefter returneres true. |
|
|
Erklæring |
bool DB_Screen::modtagPinkode () |
|
Funktionsnavn |
modtagKortNummer |
|
Input |
intet |
|
Output |
True/false |
|
Funktion |
Funktionen udskriver ” Indtast brugerkortnummer:” på skærmen og modtager kortnummer, som indtastning. Hvis der er tastet ”-1” returneres false. Hvis der er tastet forskellig fra 4 cifre udskrives: ” Kortnummeret skal være på 4 cifre. Indtast et nyt kortnummer”. Der fortsættes med at forlange et kortnummer til der er tastet 4 cifre. Hvis kortnummerstørrelse er korrekt undersøges om kortnummeret allerede findes i tabel_kortdata ved at kalde findesKortNummer. Hvis kortnummeret findes skrives på skærmen: ” Kortnummer xxxx er allerede oprettet”. Der forlanges et nyt kortnummer indtil det er korrekt indtastet. Herefter returneres true. |
|
Erklæring |
bool DB_Screen::modtagKortNummer() |
Flowchart modtagKortNummer:

|
Funktionsnavn |
modtagBrugerNavn |
|
|
Input |
intet |
|
|
Output |
True/false |
|
|
Funktion |
Funktionen udskriver ” Indtast brugernavn:” på skærmen og modtager brugernavn, som indtastning. Hvis der er tastet ”-1” returneres false. Hvis der er tastet mere end 256 tegn udskrives: ” Navnet er for langt. Indtast et nyt navn”. Der fortsættes med at forlange et brugernavn til der er tastet mindre end 156 tegn. Herefter returneres true. |
|
|
Erklæring |
bool DB_Screen::modtagBrugerNavn() |
|
Funktionsnavn |
retAntalForsoeg |
|
|
Input |
intet |
|
|
Output |
True/false |
|
|
Funktion |
Funktionen udskriver ” Antal forkerte forsøg, x rettes til:” på skærmen og modtager forkerte forsøg, som indtastning. Hvis der er tastet ”-1” returneres false. Funktionen opdaterer forkerte antal forsøg ved at kalde setAntalForsoeg og medgiver det modtagne forkert forsøg. Herefter returneres true. |
|
|
Erklæring |
bool
DB_Screen::retAntalForsoeg() |
|
Funktionsnavn |
retKortSpaerret |
|
Input |
intet |
|
Output |
True/false |
|
Funktion |
Funktionen undersøger om det kortnummer der er indtastet i retKortnummer er spærret. Spærret: Funktionen udskriver ”Spærret kort åbnes” Hvis der tastes –1 returneres false. Hvis der tastes ’ja’ åbnes det spærrede kort ved at kalde setKortSpaerret hvor kortnummer medgives. Hvis der tastes ’nej’ åbnes kortet ikke og der returneres true. Ikke spærret: Funktionen udskriver ” åben kort spærres” Hvis der tastes –1 returneres false. Hvis der tastes ’ja’ spærres det åbne kort ved at kalde blokerKort hvor kortnummer og false medgives. Hvis der tastes ’nej’ spærres kortet ikke og der returneres true. |
|
Erklæring |
bool
DB_Screen::retKortSpaerret() |
Flow chart:

|
Funktionsnavn |
retPinkode |
|
Input |
intet |
|
Output |
True/false |
|
Funktion |
Funktionen undersøger om det kortnummer der er indtastet i retKortnummer er spærret. Hvis spærret: Funktionen udskriver ”Spærret kort åbnes” Hvis der tastes –1 returneres false. Hvis der tastes ’ja’ åbnes det spærrede kort ved at kalde setKortSpaerret hvor kortnummer medgives. Hvis der tastes ’nej’ åbnes kortet ikke og der returneres true. Hvis ikke spærret: Funktionen udskriver ” åben kort spærres” Hvis der tastes –1 returneres false. Hvis der tastes ’ja’ spærres det åbne kort ved at kalde blokerKort hvor kortnummer og false medgives. Hvis der tastes ’nej’ spærres kortet ikke og der returneres true. |
|
Erklæring |
bool DB_Screen::retPinkode() |
Flowchart:

|
Funktionsnavn |
retKortNummer |
|
Input |
intet |
|
Output |
True/false |
|
Funktion |
Funktionen udskriver: ” Indtast kortnummer”. Hvis der er indtastet –1 returneres false. Hvis kortnummeret ikke er på 4 cifre forlanges det indtastet igen. Hvis kortnummeret er på 4 cifre undersøges om det findes i tabel_kortdata ved at kalde findesKortNummer hvor kortnumemret medgives. Hvis kortnummeret ikke findes forlanges det indtastet igen. Er der indtastet et gyldigt kortnummer fortsættes. Funktionen udskriver nu: ”Nuværende kortnummer xxxx rettes til:” Hvis der er indtastet –1 returneres false. Hvis der er indtastet ’*’ rettes intet og der returneres true. Hvis kortnummeret er på 4 cifre undersøges om det findes i tabel_kortdata ved at kalde findesKortNummer hvor kortnumemret medgives. Hvis kortnummeret findes forlanges det indtastet igen. Er indtastningen gyldig rettes det nuværende kortnummer til det nyt indtastede ved at kalde funktionen: setKortNummer hvor der medgives det nye og gamle kortnummer og der returneres true. |
|
Erklæring |
bool
DB_Screen::retKortNummer() |

|
Funktionsnavn |
retBrugerNavn |
|
|
Input |
intet |
|
|
Output |
True/false |
|
|
Funktion |
Funktionen udskriver: ” Nuværende brugernavn xxxx rettes til:”. Til at finde det nuværende brugernavn kaldes funktionen: getNavn. Hvis der indtastes ’*’ rettes intet og der returneres true. Hvis der indtastes –1 rettes intet, og der returneres false. Hvis der er indtastet et korrekt opdateres brugernavn ved at kalde funktionen setNavn hvor der medgives brugernavn og brugernummer. |
|
|
Erklæring |
bool DB_Screen::retBrugerNavn() |
|
Funktionsnavn |
ErDerStatus |
|
|
Input |
intet |
|
|
Output |
True/false |
|
|
Funktion |
Funktionen undersøger om der er fejl på terminalen ved at kalde funktionen: getTerminalStatus. Hvis det returnerede tal er forskellig fra 0 er der fejl, og der udskrives: ” Der er fejl paa terminal 1. Fejlkode: XX” Er der fejl returneres false – ellers true. |
|
|
Erklæring |
bool
DB_Screen::ErDerStatus () |
|
Funktionsnavn |
spaerKort |
|
Input |
intet |
|
Output |
True/false |
|
Funktion |
Funktionen står for at spærre et givet kort. Der udskrives på skærmen: ”Søg på bruger”. getBrugerAll kaldes hvor det indtastede brugernavn medgives. -Hvis det tastes –1 returneres false. Der udskrives på skærmen: ”Indtast ønskede brugernummer”. GetKortData kaldes hvor det indtastede brugernummer medgives. -Hvis der tastes –1 returneres true. Der udskrives på skærmen: ”Indtast kortnummer”. FindesKortnummer kaldes hvor det indtastede kortnummer medgives. -Hvis der tastes –1 returneres false. -Hvis det indtastede kortnummer ikke findes udskrives:” Kortnummer findes ikke” . Der forlanges et kortnummer indtil det indtastede findes i databasen. Findes det indtastede kortnummer spærres dette ved at kalde blokerKort hvor det indtastede kortnummer og false medgives. Der returneres true. |
|
Erklæring |
bool
DB_Screen::spaerKort() |
Flowchart:

|
Funktionsnavn |
fjernBruger |
|
|
Input |
Intet |
|
|
Output |
True/false |
|
|
Funktion |
Funktionen står for fjernelse af en bruger fra databasen. Der udskrives på skærmen: ”Søg på bruger”. getBrugerAll kaldes hvor det indtastede brugernavn medgives. -Hvis det tastes –1 returneres false. Der udskrives på skærmen: ” Indtast ønskede bruger nummer:” SletBruger kaldes hvor det indtastede brugernummer medgives. Hvis sletBruger returnerer true, skrives på skærmen: ”bruger XXXX er slettet.” Til at finde det aktuelle brugernavn kaldes getNavn hvor det indtastede brugernummer medgives. Der returneres true. |
|
|
Erklæring |
bool DB_Screen::fjernBruger() |
|
Funktionsnavn |
redigerBruger |
|
Input |
intet |
|
Output |
True/false |
|
Funktion |
Funktionen står for redigering af brugerdata. Der udskrives på skærmen: ”Søg på bruger”. getBrugerAll kaldes hvor det indtastede brugernavn medgives. -Hvis det tastes –1 returneres false. Der udskrives på skærmen: ”Indtast ønskede brugernummer”. GetKortData kaldes hvor det indtastede brugernummer medgives. -Hvis der tastes –1 returneres true. Funktionen kalder nu:
-Hvis én af de kaldte funktioner returnerer false, returneres false. |
|
Erklæring |
bool DB_Screen::redigerBruger() |
Flowchart:

|
Funktionsnavn |
nyBruger |
|
Input |
intet |
|
Output |
True/false |
|
Funktion |
Funktionen står for oprettelse af ny bruger. Funktionen kalder følgende funktioner:
-Hvis én af de kaldte funktioner returnerer false, returneres false. opretNyBruger kaldes hvor brugernavn, kortnummer og pinkode medgives. Hvis opretNyBruger returnerer true skrives på skærmen: ” Bruger succesfuldt oprettet”, og der returneres true. Hvis opretNyBruger returnerer false skrives på skærmen: ” Bruger ikke oprettet pga. fejl” og der returneres false. |
|
Erklæring |
bool DB_Screen::nyBruger() |
Flowchart:

|
Funktionsnavn |
hovedMenu |
|
Input |
intet |
|
Output |
True/false |
|
Funktion |
Funktionen udskriver hovedmenuen på skærmen og afventer indtastning af funktionekode. erDerStatus kaldes for at se om der er fejl på terminalen. Hvis der tastes ’O’ eller ’o’ kaldes nyBruger og erDerStatus. Hvis der tastes ’R’ eller ’r’ kaldes redigerBruger og erDerStatus. Hvis der tastes ’F’ eller ’f’ kaldes fjernBruger og erDerStatus. Hvis der tastes ’S’ eller ’s’ kaldes spaerKort og erDerStatus. Hvis der tastes andet end de ovennævnte afventer funktionen en ny indtastning. |
|
Erklæring |
void
DB_Screen::hovedMenu() |

Af: Jesper Johansen